package org.fixies.resource;

import org.fixies.utils.Validator;

import java.io.InputStream;


/**
 * クラスパスからリソースをロードするリソースローダー
 *
 * @author Kawasaki
 */
public class ClasspathResourceLoader implements ResourceLoader {

    private final Class<?> clazz_;

    public ClasspathResourceLoader() {
        clazz_ = this.getClass();
    }

    /**
     * コンストラクタ
     *
     * @param clazz リソースをロードする際に使用するClass
     */
    public ClasspathResourceLoader(Class<?> clazz) {
        Validator.notNull(clazz);
        clazz_ = clazz;
    }

    /**
     * @see org.fixies.resource.ResourceLoader#loadResource(java.lang.String)
     */
    public InputStream loadResource(String resourceName) {
        return loadResource(resourceName, clazz_);
    }


    public InputStream loadResource(String resourceName, Class<?> clazz) {
        Validator.notNull(clazz);
        return doLoadResource(resourceName, clazz);
    }

    private InputStream doLoadResource(String resourceName, Class<?> clazz) {
        Validator.notNull(resourceName);
        Validator.notNull(clazz);
        InputStream is = clazz.getResourceAsStream(resourceName);
        if (is == null) {
            String msg =
                    "Can't find resource. name=[" + resourceName + "] "
                            + "Class =[" + clazz + "]";
            throw new ResourceNotFoundException(msg);
        }
        return is;
    }
}
